public class LeetCode8 {
    public int myAtoi(String s) {
        int index = 0;
        int sign = 1;
        int result = 0;
        // 首先检查字符串是否为空
        if (s.isEmpty()) {
            return 0;
        }
        // 去除空格
        while (index < s.length() && s.charAt(index) == ' ') {
            index++;
        }
        // 处理符号
        if (index < s.length() && (s.charAt(index) == '+' || s.charAt(index) == '-')) {
            // 检查下一个字符是否是'-'或'+' 1 数字 -1 字符
            sign = s.charAt(index) == '+'? 1 : -1;
            index++;
        }
        // 读取数字 当 index 小于字符串长度且当前字符是数字时，进行以下操作
        while (index < s.length() && Character.isDigit(s.charAt(index))) {
            //将当前数字字符转换为对应的整数值，通过减去字符 '0' 的 ASCII 值得到。
            int digit = s.charAt(index) - '0';
            //进行溢出检查。因为 Integer.MAX_VALUE 是 2147483647，所以当 result 已经大于 Integer.MAX_VALUE / 10 或者
            // result 等于 Integer.MAX_VALUE / 10 且当前数字大于 7 时，会发生溢出
            if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && digit > 7)) {
                //对于负数情况，类似地，Integer.MIN_VALUE 是 -2147483648，这里利用 sign 来判断正负并返回相应的边界值
                return sign == 1? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            //当前数字添加到 result 中，先将 result 乘以 10 再加上当前数字。
            result = result * 10 + digit;
            //继续处理下一个字符
            index++;
        }
//        最终结果乘以符号，得到正确正负号的结果。
        return result * sign;
    }
}
